package com.toy.core.config;

import java.util.List;

import com.toy.core.security.login.entrypoint.LoginEntryPoint;
import com.toy.core.security.logout.handler.LogoutHandler;
import com.toy.core.security.userdetails.UserDetailsService;

public interface SysConfig {
	
	/**
	 * 系统默认首页
	 */
	public static final String SECURITY_SYSTEM_HOMEPAGE_URL = "security.system.homepage.url";
	
	/**
	 * 用戶登出標示
	 */
	public static final String SECURITY_SYSTEM_LOGOUT_URLMARK = "security.system.logout.urlmark";
	
	/**
	 * 匿名访问URL集合 
	 */
	public static final String SECURITY_SYSTEM_URL_PUBLIC = "security.system.url.public";
	
	/**
	 * 无权访问页
	 */
	public static final String SECURITY_SYSTEM_ACCESSDENIEDPAGE_URL = "security.system.accessDeniedPage.url";
	
	/**
	 * 登陆类型(storage,cas,ntlm,other)
	 */
	public static final String SECURITY_SSO_LOGIN_TYPE = "security.sso.login.type";
	
	/**
	 * 登陆类型对应的登陆页跳转类bean
	 */
	public static final String SECURITY_SSO_LOGIN_MAPPING = "security.sso.login.mapping";
	
	/**
	 * 系统登出时处理链
	 */
	public static final String SECURITY_SSO_CHAIN_LOGOUT_HANDLER = "security.sso.chain.logout.handler";
	
	/**
	 * cookie用户登陆时,存储的cookit的名称
	 */
	public static final String SECURITY_SSO_COOKIE_NAME = "security.sso.cookie.name";
	
	/**
	 * ticket用户登陆时,url参数名
	 */
	public static final String SECURITY_SSO_TICKET_REQUEST_PARAM = "security.sso.ticket.request.param";
	
	/**
	 * storage用户登陆时，登陆的url地址
	 */
	public static final String SECURITY_SSO_STORAGE_LOGIN_INPUT_URL = "security.sso.storage.login.input.url";
	
	/**
	 * storage用户登陆时，应用验证登陆action
	 */
	public static final String SECURITY_SSO_STORAGE_LOGIN_VALIDATE_URL = "security.sso.storage.login.validate.url";
	/**
	 * storage用户登陆时，用户验证方式类
	 */
	public static final String SECURITY_SSO_STORAGE_AUTHENTICATION_BEAN_NAME = "security.sso.storage.authentication.beanname";
	
	/**
	 * CAS的登陆页面
	 */
	public static final String SECURITY_SSO_CAS_LOGIN_URL = "security.sso.cas.login.url";
	
	/**
	 * CAS的验证页面
	 */
	public static final String SECURITY_SSO_CAS_VALIDATE_URL = "security.sso.cas.validate.url";
	
	/**
	 * cas用户登陆时,应用集成cas验证url(以往采用filter方法,其实采用controller的方式也可行)
	 */
	public static final String SECURITY_SSO_CAS_LOGIN_VALIDATE_URL = "security.sso.cas.login.validate.url";
	
	/**
	 * ntlm用户登陆时，多域的配置信息
	 */
	public static final String SECURITY_SSO_NTLM_CONFIG = "security.sso.ntlm.config";
	
	/**
	 * ntlm用户登陆时,应用验证登陆action
	 */
	public static final String SECURITY_SSO_NTLM_LOGIN_VALIDATE_URL = "security.sso.ntlm.login.validate.url";
	
	
	public String getOption(String key);
	
	/**
	 * 系统默认首页
	 * @return
	 */
	public String getHomePageUrl();
	
	/**
	 * 用户登出标示
	 * @return
	 */
	public String getLogoutUrl();
	
	/**
	 * 无权访问页面
	 * @return
	 */
	public String getAccessDeniedPageUrl();
	
	/**
	 * 获得登陆跳转页面
	 * @return
	 */
	public LoginEntryPoint getLoginEntryPoint();
	
	/**
	 * cookie用户登陆时,存储的cookit的名称
	 * @return
	 */
	public String getCookieName();
	
	/**
	 * 获得登出处理链
	 * @return
	 */
	public LogoutHandler[] getLogoutChain();
	
	/**
	 * storage用户登陆时，登陆的url地址
	 * @return
	 */
	public String getStorageLoginInputUrl();
	
	/**
	 * storage用户登陆时，应用验证登陆action
	 * @return
	 */
	public String getStorageLoginValidateUrl();
	
	/**
	 * storage用户登陆时，用户验证方式类
	 * @return
	 */
	public UserDetailsService getStorageUserDetailsService();
	
	/**
	 * cas用户登陆时,应用验证登陆action(以往采用filter方法,现在采用controller的方式)
	 * @return
	 */
	public String getCasLoginValidateUrl();
	
	/**
	 * cas的登陆链接
	 * @return
	 */
	public String getCasLoginUrl();
	
	/**
	 * cas的验证链接
	 * @return
	 */
	public String getCasValidateUrl();
	
	/**
	 * ntlm用户登陆时，多域的配置信息（ds2\\192.168.20.9;ds10\\192.168.20.131）
	 * @return
	 */
	public String getNtlmConfig();
	
	/**
	 * ntlm用户登陆时,应用集成ntlm登陆验证url
	 * @return
	 */
	public String getNtmlLoginValidateUrl();
	
	/**
	 * ticket用户登陆时,url参数名
	 * @return
	 */
	public String getTicketRequestParam();
	
	
	/**
	 * 匿名访问url
	 * @return
	 */
	public List<String> getPublicUrls();
}
